package com.rock.sys.util;

import java.util.ArrayList;
import java.util.List;

import com.eova.model.MetaObject;
import com.eova.widget.WidgetManager;
import com.eova.widget.WidgetUtil;
import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.Record;
import com.rock.sys.config.RockConfig;

import cn.hutool.core.util.StrUtil;

public class RockUtil {

	/**
	 * 原值被自动转成了中文显示，转换前先备份值为"字段_val"
	 * 
	 * @param reList Grid数据集
	 * @param pkName 当前Eova_Object的主键名
	 */
	public static void convertRecordValue(Record record, MetaObject object, Controller c) {
		// 转换表达式
		List<Record> list = new ArrayList();
		list.add(record);
		// 备份Value列，然后将值列转换成Key列
		WidgetUtil.copyValueColumn(list, object.getPk(), object.getFields());
		// 根据表达式将数据中的值翻译成汉字
		WidgetManager.convertValueByExp(c, object, object.getFields(), list);
	}

	/**
	 * 初始化角色绑定拦截器
	 * 
	 * @param bizIntercept
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public static <T> T initRoleBindIntercept(String bindIntercept) throws Exception {
		Object o = initIntercept(bindIntercept);
		if (o == null) {
			// 命中默认拦截器(如果有)
			return (T) RockConfig.getDefaultRoleBindIntercept();
		}
		return (T) o;
	}

	/**
	 * 初始化角色绑定拦截器
	 * 
	 * @param bindIntercept
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public static <T> T initIntercept(String bindIntercept) throws Exception {
		if (!StrUtil.isBlank(bindIntercept)) {
			try {
				// 实例化自定义拦截器
				return (T) Class.forName(bindIntercept).newInstance();
			} catch (Exception e) {
				e.printStackTrace();
				throw new Exception("实例化角色绑定拦截器异常，请检查类是否存在:" + bindIntercept);
			}
		}
		return null;
	}
}
